package com.cn.wanxi.service.impl;

import com.cn.wanxi.dao.CompanyDao;
import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.service.ICompanyService;
import com.cn.wanxi.util.IOTool;
import com.cn.wanxi.util.Path;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 第三階段
 * 返回公司对象数据（CompanyModel） 封装记事本读取后的数据
 * 数据来源于记事本 读取记事本数据
 * 在文件里面去读：需要文件
 * 写入文件--将数据写入记事本
 * --------------------------
 * 1.创建文件夹,在文件夹里面创建文件
 * 2.写入文件
 * 3.读取文件
 * 4.封装数据
 * ---------------------
 * 如果一段代码里面做了不同的几件事情（事情不是太相关，关系不大），
 * 则应该考虑将不同的功能写入不同的方法
 */
public class CompanyServiceImpl implements ICompanyService {
    //    private static final String SPILT = "\n";
//    private static final String PATH = "E:\\wanxi\\step-3\\canyin03-1011\\web";
//    private static final String DIRECTORY = "note";
    private static final String FILE_NAME = "company.txt";

    // 魔法数据：方法里面不应该出现变量为固定的，如果有则变成常量：枚举
    public static void main(String[] args) {
        new CompanyServiceImpl().setCompanyModel();
//        byte i = 0;
//        String s = "a";
//        for (int j = 0; j < 10; j++) {
//            i = i + 1;
//            i++;
//            i+=1;//这里做了一个隐式转换
//            s += "b";
//            i=i++;
//        }
//        System.out.println(s);
    }

    @Override
    public CompanyModel setCompanyModel() {
        /**
         * 拆分方法
         */
//        1.创建文件


        File file = IOTool.createFile(Path.PATH, Path.DIRECTORY, Path.COMPANY);
//        2.写入数据:写入到那个地方？文件
        List<String> data = setDaoData();
        IOTool.writeData(file, data);
//        3.读取数据
        String string = String.valueOf(IOTool.readData(file));
//        4.封装数据
        CompanyModel companyModel = setData(string);
        return companyModel;
    }

    /**
     * 通过读取出来的数据封装成CompanyModel
     *
     * @param string
     * @return
     */
    private CompanyModel setData(String string) {
        System.out.println(string);
//        regex正则表达式
        String[] results = string.split(Path.SPILT);
//        for (int i = 0; i < results.length; i++) {
//            System.out.println(results[i] + "-----------" + i);
//        }
        CompanyModel companyModel = new CompanyModel();
        companyModel.setLogo(results[0]);
        companyModel.setPhone(results[1]);
        companyModel.setNet(results[2]);
        companyModel.setEmail(results[3]);
        companyModel.setLinePhone(results[4]);
        companyModel.setAddress(results[5]);
        companyModel.setVersion(results[6]);

        return companyModel;
    }

//    /**
//     * 读取文件里面的数据
//     *
//     * @param file
//     */
//    private StringBuilder readData(File file) {
////        char[] chars={};
////        字符转换为字符串怎么转换？String.valueOf
////        Integer.valueOf("")将字符串转换为整型
////        Integer.parseInt("")将字符串转换为整型
////        char a = 'd';
////        Character cc = a;
////        String ss = a + "";//
////        String str1="hello";
////        String str2="world";
////        String str3=str1+str2;
////        String str4="hello"+"world";
////        String str5="helloworld";
////        问题：str3==str4,str4==str5,str3==str5?
//        StringBuilder result = new StringBuilder();
//        try {
////            InputStream inputStream = new FileInputStream(file);
////            byte[] b=new byte[3];
////            int read = inputStream.read(b);
////            System.out.println(read);
////            System.out.println((char) read);
//            Reader reader = new FileReader(file);
////            hash码
////            char[] chars = new char[5];
////            for (int i = 0; i < file.length(); i++) {
////                int read = reader.read();
//////                System.out.println(read);
////                System.out.print((char) read);
////            }
//            int read;
////            +=
//
////            String和StringBuild和StringBuffer的区别？
//            while ((read = reader.read()) != -1) {
////                System.out.print((char) read + "");
//                result.append((char) read);
////                result=result+(char) read;
//            }
////            System.out.println(result);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return result;
//    }

    private List<String> setDaoData() {
        CompanyDao companyDao = new CompanyDao();
//        String[] data = {companyDao.getLogo(), companyDao.getPhone(), companyDao.getNet()};
//        String[] data=new String[5];
//        data[0]=companyDao.getLogo();
//        data[1]=companyDao.getLogo();
//        data[2]=companyDao.getLogo();
////        data[3]=companyDao.getLogo();
//        data[4]=companyDao.getLogo();
//        data[4]=companyDao.getNet();
//        data[6]=companyDao.getLogo();
//        这种数组的缺点：必须要把所有的数据写入到{}；
//        数组和集合的区别？
        List<String> list = new ArrayList<>();
        list.add(companyDao.getLogo());
        list.add(companyDao.getPhone());
        list.add(companyDao.getNet());
        list.add(companyDao.getEmail());
        list.add(companyDao.getLinePhone());
        list.add(companyDao.getAddress());
        list.add(companyDao.getVersion());
        return list;
    }

//    /**
//     * 写入数据
//     *
//     * @param file 写入的文件
//     * @param data 数据
//     */
//    private void writeData(File file, List<String> data) {
////        new OutputStream() {大括号里面是一个类，子类 没有名字，匿名内部类
////        文件输出流和缓冲输出流的区别？
////        所有引用类型的父类都是Object类
////        int char 相互转换
////        int a=40020;
////        char c= (char) a;
////        System.out.println(c);
//        try {
//            OutputStream outputStream = new FileOutputStream(file);
////            CompanyDao companyDao = new CompanyDao();
////            如果想int 则需要将字符串转换为整型
////            String logo = companyDao.getLogo();
////            请列举5个异常？
////            FileNotFoundException
////            数字格式化异常
////            java.lang.NumberFormatException: For input string: "../img/logo.jpg"
////            int a = Integer.parseInt(logo);
////            汉子占多少个字节？
//            for (int i = 0; i < data.size(); i++) {
//                outputStream.write(data.get(i).getBytes(StandardCharsets.UTF_8));
//                outputStream.write(SPILT.getBytes(StandardCharsets.UTF_8));
////                outputStream.write(11111);
//            }
////            outputStream.write(companyDao.getLogo().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getPhone().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getNet().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getEmail().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getAddress().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getLinePhone().getBytes());
////            outputStream.write("\n".getBytes());
////            outputStream.write(companyDao.getVersion().getBytes());
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

//    /**
//     * 创建文件
//     *
//     * @param path      路径
//     * @param directory 文件夹
//     * @param fileName  文件名
//     * @return 返回文件
//     */
//    private File createFile(String path, String directory, String fileName) {
//        File tempDirectory = new File(path, directory);
//        tempDirectory.mkdir();//创建文件夹
//        File file = new File(tempDirectory, fileName);
//        try {
//            file.createNewFile();//創建文件
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return file;
//    }
}
